Skip to main content

第 8 章:設定 Terraform 環境變數

Terraform 使用一系列的環境變數來客製化各方面的行為。如果只是想簡單使用 Terraform,我們並不需要設定這些環境變數;但他們可以在一些不常見的場景下幫助我們改變 Terraform 的預設行為,或是出於偵錯目的修改輸出日誌的等級。

TF_LOG

此環境變數可以設定 Terraform 內部日誌的輸出級別,例如:

export TF_LOG=TRACE
  • 日誌等級有 TRACEDEBUGINFOWARN 和 ERROR
  • TRACE 包含的資訊最多也最冗長,如果 TF_LOG 被設定為這五級以外的值時 Terraform 會預設使用 TRACE
  • 如果在使用 Terraform 的過程中遇到未知的錯誤並懷疑是 Terraform 或相關外掛程式的 bug,請設定 TF_LOG 等級後收集輸出的日誌並提交給相關人員

TF_LOG_PATH

此環境變數可以設定日誌檔案保存的位置。注意,如果 TF_LOG_PATH 被設定了,那麼 TF_LOG 也必須被設定。

export TF_LOG_PATH=./terraform.log

TF_INPUT

當環境變數設定為 "false" 或 "0" 時,等同於執行 terraform 相關命令列指令時加入了參數 -input=false。如果你想在自動化環境下避免 Terraform 透過命令列的互動式提示要求給定輸入變數的值而是直接報錯時(無 default 值的輸入變量,無法透過任何途徑獲得值)可以設定該環境變數:

export TF_INPUT=0

TF_VAR_name

我們在介紹輸入變數賦值時介紹過,可以透過設定名為 TF_VAR_name 的環境變數來為名為 "name" 的輸入變數賦值:

export TF_VAR_region=us-west-1
export TF_VAR_ami=ami-049d8641
export TF_VAR_alist='[1,2,3]'
export TF_VAR_amap='{ foo = "bar", baz = "qux" }'

TF_CLI_ARGS 以及 TF_CLI_ARGS_name

TF_CLI_ARGS 的值指定了附加給命令列的額外參數,這使得在自動化 CI 環境下可以輕鬆自訂 Terraform 的預設行為。

此參數的值會直接插入在子命令後(例如 plan)以及透過命令列指定的參數之前。這種做法確保了環境變數參數優先於透過命令列傳遞的參數。

例如,執行這樣的指令: TF_CLI_ARGS="-input=false" terraform apply -force,它等價於手動執行 terraform apply -input=false -force

TF_CLI_ARGS 變數會影響所有的 Terraform指令。如果你只想影響某個特定的子指令,可以使用 TF_CLI_ARGS_name 變數。例如:TF_CLI_ARGS_plan="-refresh=false",就只會針對 plan 子指令運作。

這個環境變數的值會與透過命令列傳入的參數一樣被解析,你可以在值裡使用單引號和雙引號來定義字串,多個參數之間以空格分隔。

TF_DATA_DIR

TF_DATA_DIR 可以修改 Terraform 保存在每個工作目錄下的資料的位置。一般來說,Terraform 會把這些資料寫入目前工作目錄下的 .terraform 資料夾內,但這個位置可以透過設定 TF_DATA_DIR 來修改。

大部分情況下我們不應該設定該變量,但有時我們不得不這樣做,例如預設路徑下我們無權寫入資料時。

這個數據目錄被用來保存下一次執行任意命令時需要讀取的數據,所以必須被妥善保存,並確保所有的 Terraform 命令都可以一致地讀寫它,否則 Terraform 會找不到 Provider 套件、模組代碼以及其他文件。

TF_IN_AUTOMATION

如果該變數被設定為非空值,Terraform 會意識到自己運行在一個自動化環境下,從而調整自己的輸出以避免給出關於該執行什麼子命令的建議。這可以使得輸出更加一致且減少非必要的資訊量。

TF_REGISTRY_DISCOVERY_RETRY

此變數定義了嘗試從 registry 拉取套件或模組程式碼遇到錯誤時的重試次數。

TF_REGISTRY_CLIENT_TIMEOUT

此變數定義了發送到 registry 連線請求的逾時時間,預設值為 10 秒。可以這樣設定超時:

export TF_REGISTRY_CLIENT_TIMEOUT=15

TF_CLI_CONFIG_FILE

該變數設定了 Terraform 命令列設定檔的位置:

export TF_CLI_CONFIG_FILE="$HOME/.terraformrc-custom"